package br.com.werp.regras.documento.integracao;

import br.com.werp.regras.geral.ErroPadrao;
import br.com.werp.regras.geral.integracao.MasterDAO;
import br.com.werp.regras.geral.util.BeanUtil;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.util.Util;
import br.com.werp.regras.geral.vos.documento.DocumentoImpostoAgrupadoVO;
import br.com.werp.regras.geral.vos.documento.DocumentoImpostoVO;
import br.com.werp.regras.geral.vos.tabelas.Documento_imposto;
import br.com.werp.regras.geral.vos.tabelas.Tipo_documento;

import java.sql.Connection;
import java.sql.SQLException;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;


/**
 * @author Sobreira
 * Criado em 18/07/2006
 */
public class ImpostoDAO extends MasterDAO {
    private static ImpostoDAO impostoDAO;

    private ImpostoDAO(String banco) throws Exception {
        super(banco);
    }

    public static ImpostoDAO getImpostoDAO() throws Exception {
        if (impostoDAO == null) {
            impostoDAO = new ImpostoDAO(Constantes.BANCO);
        }

        return impostoDAO;
    }

    public void atualizarDocumento_imposto(Object key,
        Documento_imposto documento_imposto) throws Exception {
        Connection connection = validarTransacao(key);
        atualizarVO(connection, documento_imposto, new String[] { "dcim_id" });
    }

    public List pesquisarDocumentoImpostoAgrupado(
        DocumentoImpostoAgrupadoVO agrupadoVO) throws Exception {
        Connection connection = getConexao();

        try {
            String tabelas =
                "agrupamento_documento , documento_imposto , " +
                "documento_financeiro , documento , tipo_documento";
            String where =
                " and dcim_id = dcfi_documento and docm_id = dcfi_documento " +
                " and  apdo_doc_agrupado = docm_id and docm_tipo = tdoc_id";

            return pesquisarVO(connection, agrupadoVO, where, tabelas,
                DocumentoImpostoAgrupadoVO.EXCLUIDAS);
        } finally {
            liberaConeccao(connection);
        }
    }

    public List pesquisarDocumentoImpostoVO(
        DocumentoImpostoVO documentoImpostoVO) throws Exception {
        Connection connection = getConexao();

        try {
            String tabelas =
                "documento_imposto ,documento_financeiro , documento";
            String where =
                " and dcim_id = dcfi_documento and docm_id = dcfi_documento ";

            List exluidas = new LinkedList();
            exluidas.addAll(Arrays.asList(DocumentoImpostoVO.EXCLUIDAS));
            exluidas.addAll(BeanUtil.listarPropriedades(new Tipo_documento()));

            return pesquisarVO(connection, documentoImpostoVO, where, tabelas,
                Util.converterListDeStringParaArrayDeString(exluidas));
        } finally {
            liberaConeccao(connection);
        }
    }

    public void excluirDocumento_imposto(Object key,
        Documento_imposto documento_imposto)
        throws ErroPadrao, SQLException, Exception {
        excluirVO(validarTransacao(key), documento_imposto);
    }
}
